// Copyright (C) 2011-2012 CRS4.
//
// This file is part of Seal.
//
// Seal is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 3 of the License, or (at your option)
// any later version.
//
// Seal is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with Seal. If not, see <http://www.gnu.org/licenses/>.
package tests.it.crs4.seal.recab;
import java.io.StringReader;
import java.util.Set;
import java.io.StringReader;
import org.junit.*;
import static org.junit.Assert.*;
import it.crs4.seal.recab.HashSetVariantTable;
import it.crs4.seal.recab.RodFileVariantReader;
import it.crs4.seal.recab.VcfVariantReader;
import it.crs4.seal.common.FormatException;
public class TestHashSetVariantTable
{
private HashSetVariantTable emptyTable;
@Before
public void setup()
{
emptyTable = new HashSetVariantTable();
}
private void loadIntoEmptyTable(String s) throws java.io.IOException, FormatException
{
emptyTable.load( new RodFileVariantReader(new StringReader(s)) );
}
@Test(expected=FormatException.class)
public void testLoadEmpty() throws java.io.IOException
{
loadIntoEmptyTable("");
}
@Test
public void testDontLoadCdna() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14436 rs1045951 0 - G G C/T cDNA single unknown 0 0 unknown exact 3");
assertFalse( emptyTable.isVariantLocation("1", 14435));
}
@Test
public void testDontLoadNonSingle() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14436 rs1045951 0 - G G C/T genomic insertion unknown 0 0 unknown exact 3");
assertFalse( emptyTable.isVariantLocation("1", 14435));
}
@Test
public void testDontLoadNonExact() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown between 3");
assertFalse( emptyTable.isVariantLocation("1", 14435));
}
@Test
public void testDontLoadIfLongerThan1() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14437 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
assertFalse( emptyTable.isVariantLocation("1", 14435));
}
@Test
public void testSimple() throws java.io.IOException
{
loadIntoEmptyTable("585 chr1 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
assertTrue( emptyTable.isVariantLocation("chr1", 14435));
}
@Test
public void testMultiple() throws java.io.IOException
{
String data =
"585 1 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3\n" +
"585 1 10259 10260 rs72477211 0 + C C A/G genomic single unknown 0 0 unknown exact 1";
loadIntoEmptyTable(data);
assertTrue( emptyTable.isVariantLocation("1", 14435));
assertTrue( emptyTable.isVariantLocation("1", 10259));
}
@Test(expected=RuntimeException.class)
public void testPositionTooBig() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
emptyTable.isVariantLocation("1", Integer.MAX_VALUE + 1L);
}
@Test(expected=FormatException.class)
public void testBadCoord() throws java.io.IOException
{
loadIntoEmptyTable("585 1 aaa 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
}
@Test(expected=FormatException.class)
public void testBadCoord2() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 aaa rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
}
@Test(expected=RuntimeException.class)
public void testQueryTooBig() throws java.io.IOException
{
loadIntoEmptyTable("585 1 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
emptyTable.isVariantLocation("1", Integer.MAX_VALUE + 1L);
}
@Test(expected=RuntimeException.class)
public void testCoordTooBig() throws java.io.IOException
{
loadIntoEmptyTable("585 1 4500000000 4500000001 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3");
}
@Test
public void testSize() throws java.io.IOException
{
String s1 = "585 1 13023 13024 rs2462498 0 - G G C/G genomic single unknown 0 0 unknown exact 3\n" +
"585 1 13078 13079 rs71249498 0 + C C C/G genomic single unknown 0 0 unknown exact 3\n";
String s2 = "585 2 13107 13108 rs71234146 0 + G G A/G genomic single unknown 0 0 unknown exact 3\n" +
"585 2 13109 13110 rs71267774 0 + G G A/G genomic single unknown 0 0 unknown exact 3\n";
String s3 = "585 3 13115 13116 rs62635286 0 + T T G/T genomic single unknown 0 0 unknown exact 3\n" +
"585 3 13117 13118 rs62028691 0 - A A C/T genomic single unknown 0 0 unknown exact 3\n" +
"585 3 13137 13138 rs12239753 0 + T T C/T genomic single unknown 0 0 unknown exact 3\n";
assertEquals(0, emptyTable.size());
loadIntoEmptyTable(s1);
assertEquals(2, emptyTable.size());
loadIntoEmptyTable(s1 + s2);
assertEquals(4, emptyTable.size());
loadIntoEmptyTable(s1 + s2 + s3);
assertEquals(7, emptyTable.size());
}
@Test
public void testGetContigs() throws java.io.IOException
{
String data =
"585 1 10259 10260 rs72477211 0 + C C A/G genomic single unknown 0 0 unknown exact 1\n" +
"585 3 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3\n" +
"585 5 14435 14436 rs1045951 0 - G G C/T genomic single unknown 0 0 unknown exact 3";
loadIntoEmptyTable(data);
Set<String> contigs = emptyTable.getContigs();
assertEquals(3, contigs.size());
assertTrue(contigs.contains("1"));
assertTrue(contigs.contains("3"));
assertTrue(contigs.contains("5"));
}
@Test
public void testLoadMultiBaseVariant() throws java.io.IOException
{
String vcfDel =
"##fileformat=VCFv4.1\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 1 rs112766696 AC A . PASS VC=INDEL\n";
VcfVariantReader reader = new VcfVariantReader( new StringReader(vcfDel) );
reader.setReadSnpsOnly(false);
emptyTable.load(reader);
assertTrue(emptyTable.isVariantLocation("1", 1));
assertTrue(emptyTable.isVariantLocation("1", 2));
}
@Test
public void testOverlappingVariants() throws java.io.IOException
{
String vcf =
"##fileformat=VCFv4.1\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 1 rs112766696 ACG A . PASS VC=INDEL\n" +
"1 2 rs112766696 C A . PASS VC=SNP\n";
VcfVariantReader reader = new VcfVariantReader( new StringReader(vcf) );
reader.setReadSnpsOnly(false);
emptyTable.load(reader);
assertTrue(emptyTable.isVariantLocation("1", 1));
assertTrue(emptyTable.isVariantLocation("1", 2));
assertTrue(emptyTable.isVariantLocation("1", 3));
assertEquals(3, emptyTable.size());
}
@Test
public void testUnsortedVariants() throws java.io.IOException
{
String vcf =
"##fileformat=VCFv4.1\n" +
"#CHROM POS ID REF ALT QUAL FILTER INFO\n" +
"1 1 rs112766696 ACG A . PASS VC=INDEL\n" +
"1 6 rs112766696 C A . PASS VC=SNP\n" +
"1 5 rs112766696 C A . PASS VC=SNP\n";
VcfVariantReader reader = new VcfVariantReader( new StringReader(vcf) );
reader.setReadSnpsOnly(false);
emptyTable.load(reader);
assertTrue(emptyTable.isVariantLocation("1", 1));
assertTrue(emptyTable.isVariantLocation("1", 5));
assertTrue(emptyTable.isVariantLocation("1", 6));
}
public static void main(String args[]) {
org.junit.runner.JUnitCore.main(TestHashSetVariantTable.class.getName());
}
}